#ifndef _QUEUE_
#define _QUEUE_
#include<my_header.h>

typedef struct Node{
    int data;
    struct Node* next;
}Node_t;

typedef struct  Queue
{
    /* data */
    Node_t *front;
    Node_t *tail;
    int size;
}Queue_t;

int Queinit(Queue_t** que);

void Queprint(Queue_t* que);

//队列 头出
int Quepop(Queue_t* que);

//队列 尾入
int Quepush(Queue_t* que,int data);


//直接在.h文件中直接定义函数实现，会出现链接多元定义（“multiple definition”）
// int Queinit(Queue_t** que){
//     *que=(Queue_t*)calloc(1,sizeof(Queue_t));
//     (*que)->front=NULL;
//     (*que)->tail=NULL;
//     (*que)->size=0;
//     return 1;
// }

// void Queprint(Queue_t* que){
//     Node_t* tmp=que->front;
//     for(int i=0; i<que->size; i++){
//         printf("%d ",tmp->data);
//         tmp=tmp->next;
//     }
//     printf("\n");
// }

// //队列 头出
// int Quepop(Queue_t* que){
//     if(que->size==0) {
//         printf("队列为空\n");
//         return -1;
//     }
//     Node_t* tmp=que->front;
//     if(que->size==1){
//         que->tail=NULL;
//     }
//     que->front=que->front->next;
//     int ans=tmp->data;
//     free(tmp);
//     --que->size;
//     return ans;
// }

// //队列 尾入
// int Quepush(Queue_t* que,int data){
//     Node_t *node=(Node_t *) calloc(1,sizeof(Node_t));
//     node->data=data;
//     if(que->size==0){
//         que->front=node;
//         que->tail=node;
//     }else{
//         que->tail->next=node;
//         que->tail=node;
//     }
//     ++que->size;
//     return 1;
// }

#endif